El Psy Congroo

系统设计学习笔记

持续更新中……

System Design

Basic Steps

  1. Clarify and agree on the scope of the system
    • User cases
      • Who is going to use it
      • How are they going to use it
    • Constraints
      • traffic
      • high availability
  2. High level architecture design (Abstract design)
    • Sketch the important components and connections between them, but don’t go into some details
      • service layer
      • data storage layer
      • key components, eg: caching, load balance, database cluster
  3. Component Design
    • interface
    • OOD for functionalities
      • Map scenario to module
  4. Understanding Bottlenecks
  5. Scaling
    • Vertical
    • Horizontal
    • Caching
      • Application caching
      • Database caching
      • In-memory caches
    • Asynchronized
      • Queue
      • Batch
    • Load balancing
      • client-side / hardware / software
    • Database partitioning
      • vertical / horizontal
    • Microservices

SNG后台技术分享

  • 定义可用性
    • 考虑成本及损失的用户价值,2个9到4个9,3.65天到52min
  • 估算
    • 熟悉常见性能指标,通过估算而非测试得知系统能力
  • 设计优化(面向海量用户)

    把业务指标抽象为技术细节,10亿访问量/天 => 高峰并发访问量2~3w/秒 => 负载均衡到每台服务器

    • 代码级优化
      • 熟悉算法,数据结构,外部技术依赖如网络协议
      • 主动寻找优化空间,如内存开销,瓶颈,漏洞
    • 系统设计级优化 (以存储海量小文件为例)
      • 技术要点
        • 技术可行性,可扩展性,高并发/低成本/一致性
      • 初步方案
        • kv,hash,bucket
      • 深入设计
        • 基于优先级分级控制,冗余存储,同步/异步写,最终一致,hash同步,存储引擎
    • 柔性服务思维
      • 故障尽量少影响到前端用户体验
      • 识别关键路径
      • 服务降级,设置合理超时防止雪崩
      • 容灾预案,如仅50%流量可用时
    • 负载均衡
  • 运维层
    • 监控
      • 业务层
        • 接口运行状态监控,数据库同步状态监控,自动化测试监控
      • 系统层
  • 产品层
    • 友好的故障提示
    • 故障后的用户引导
    • 前端友好等待策略

饿了么订单系统架构演进

  • (微)服务架构演进
    • 基于领域认知
    • 松耦合、单一职责、关注分离
    • 可验证的结果(系统能力效率的提升)
  • 监控告警演进
    • 重视业务指标(而非仅关注系统指标)
  • Design for failure
    • 补偿机制:消息补偿(MQ挂了暂时用内存Q补偿),流程补偿(用同步轮询补偿失败的异步请求)
    • 随机故障测试(系统层,人为制造IO,CPU,网络压力,应用层,人为增加接口响应时间,对FailOver设计进行验证)